/* eslint-disable @typescript-eslint/no-empty-function */
/* eslint-disable @typescript-eslint/no-unused-vars */

import type { MessageOption } from "@/components/Message";
import type { Option as ModalBoxOption, ModalBoxResult } from "@/hooks/useModalBox";
import type { Option as DialogOption } from "@/hooks/useDialog";

const noop = () => console.warn("还未初始化 globalMethods");

// 全局方法, 这里只是一个占位(后续会在 src/GlobalProvider/Provider.ts 里填充方法)
const globalMethods = {
  /** 显示 loading */
  $showLoading(msg?: string) { noop() },

  /** 隐藏 loading */
  $hideLoading() { noop() },

  /** 消息提示 */
  $showMessage(opt: MessageOption) { noop() },

  /** 成功提示 */
  $success(msg: string, duration?: number) { noop() },

  /** 错误提示 */
  $error(msg: string, duration?: number) { noop() },

  /** 警告提示 */
  $warning(msg: string, duration?: number) { noop() },

  /** 隐藏消息提示 */
  $hideMessage() { noop() },

  /** 
   * 打开全局 ModalBox, 支持回调和Promise
   * 注意: Promise只支持, 取消, 确定, 中间按钮, 点击遮罩取消三种操作, 自定义按钮不支持, 请使用回调的方式
   */
  $showModalBox(opt: ModalBoxOption) {
    noop()
    const ret: ModalBoxResult = {
      close: false,
      confirm: false,
      dismiss: false,
      middle: false,
    }
    return Promise.resolve(ret);
  },

  /** 隐藏全局 ModalBox */
  $hideModalBox() { noop() },

  /** 全局 Dialog */
  $showDialog(opt: DialogOption) { noop() },

  /** 隐藏全局 Dialog */
  $hideDialog() { noop() },
};

export default globalMethods;
